<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    //语法糖  在底层本质上的调用Object.definePropert
    //var obj = {b:"b"};
    //obj.a="a";
    //delete obj.a;
    //console.log(obj.a);
    // for(key in obj){
    //     console.log(key);
    // }
    // configurable: true  //代表属性的可配置权限(能不能被重新定义  能不能被删除)
    // enumerable: true    //代表属性的可枚举权限(能不能出现在对象的for in循环中)
    // value: "a"          //代表属性所持有的值
    // writable: true      //代表属性的读写权限


    //全局变量
    //var a = "windows-a"
    // delete window.a;
    // console.log(window.a)
    // for(key in window){
    //     console.log(key,"window");
    // }
    // a = "windows-a"
    // delete window.a;
    // console.log(window.a)
    // var res = Object.getOwnPropertyDescriptor(window,"a")
    // console.log(res);
    // configurable: false  //代表属性的可配置权限(能不能被重新定义  能不能被删除)
    // enumerable: true    //代表属性的可枚举权限(能不能出现在对象的for in循环中)
    // value: "a"          //代表属性所持有的值
    // writable: true      //代表属性的读写权限



    //Object.prototype上的属性 他们的enumerable一般都为false
    /*var res = Object.getOwnPropertyDescriptor(Object.prototype,"toString")
    console.log(res);*/


    var  obj = {};
    Object.defineProperty(obj,"a",{
        configurable: true,  //代表属性的可配置权限(能不能被重新定义  能不能被删除)
        enumerable: true ,   //代表属性的可枚举权限(能不能出现在对象的for in循环中)
        value: "a" ,         //代表属性所持有的值
        writable: false      //代表属性的读写权限
    })
    console.log(obj);
    obj.a = "aaaa";
    console.log(obj)

</script>
</html>